package site.wenneng.dev.objs.bo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

@Data
public class TaskRemoteBO {
    /**
     * 任务ID
     */
    private Integer id;
    /**
     * 任务编号
     */
    private String taskNumber;
    /**
     * 关联需求编号
     */
    private String storyNumbers;
    /**
     * 任务标题
     */
    private String name;
    /**
     * 前置任务
     */
    private String preTask;
    /**
     * 优先级
     */
    private int priority;
    /**
     * 优先级名称
     */
    private String priorityName;
    /**
     * 任务状态
     */
    private int status;
    /**
     * 状态名称
     */
    private String statusName;
    /**
     * 任务子状态
     */
    private int subStatus;
    /**
     * 子状态名称
     */
    private String subStatusName;
    /**
     * 下达人ID
     */
    private String assigneeId;
    /**
     * 下达人名称
     */
    private String assigneeName;
    /**
     * 任务创建日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * 任务更新日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    /**
     * 缺陷编号
     */
    private String jiraId;
    /**
     * 预估工时
     */
    private BigDecimal estimateWorkload;
    /**
     * 要求完成日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date estimateFinishTime;
    /**
     * 预计开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date estimateStartTime;
    /**
     * 实际工时
     */
    private BigDecimal realWorkload;
    /**
     * 完成进度
     */
    private BigDecimal finishPercentage;
    /**
     * 实际完成日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date realFinishTime;
    /**
     * 首次集成时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date firstIntegrateTime;
    /**
     * 末次集成时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date lastIntegrateTime;

    private int taskType;
    private String taskTypeName;
    private String sprintName;
    private String sprintVersion;
    private String distributorId;
    private String distributorName;
    private Date upLocalDateTimeTime;
    private String projectManagerId;
    private Integer projectId;
    private String projectName;
    private String projectNo;
    private String productName;
    private String productNo;
    private String productId;
    private String expiredInformation;
    private Long sprintId;
    private int taskSource;
    private String taskSourceName;
    private int integrateType;
    private String reviewerId;
    private String reviewerName;
    private boolean formatCode;
    private boolean useDevPipeline;
    private boolean useTestPipeline;
    private boolean useWaitToTest;
    private int isBlade;
    private int sprintStatus;
    private boolean needTest;
    private boolean operateBill;
    private String lastIntegrateManNo;
    private String lastIntegrateManName;
    private String taskResponseId;
    private String defectResponseId;
    private String defectResponseName;
    private String taskResponseName;
    private String customers;
    private String customerNames;
    private int fromJira;
    private int fixBug;
    private boolean hasFiles;

    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date promiseDates;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date realTestFinishTime;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date promiseLocalDateTimes;

    @SuppressWarnings("SpellCheckingInspection")
    @JsonProperty("abbreviatename")
    private String abbreviateName;

}
